// 删除有序数组中的重复项 II

package Leetcode;

class solution_080 {
    public int removeDuplicates(int[] nums) {
        int count = 0; // 用于记录重复元素出现的个数
        int elemnt = 0; // 用于表示现在的元素
        int length = nums.length; // 用于表示最终删除后数组的长度
        for (int i = 0; i < length; i++) {
            if (elemnt == nums[i]) {
                count++;
                if (count == 3) {
                    // 寻找下一个不等于element的数
                    int j = i + 1;
                    for (; j < length; j++) {
                        if (nums[j] != elemnt)
                            break;
                    }
                    // 移动位置
                    length = length - (j - i);
                    int k = i;
                    for (; j < nums.length; j++) {
                        nums[k++] = nums[j];
                    }
                    // 数量置1，元素变换
                    count = 1;
                    elemnt = nums[i];
                }
            } else {
                count = 1;
                elemnt = nums[i];
            }
        }
        return length;
    }
}

// 上述方法可行但是不巧妙
public class Solution080 {
    public int removeDuplicates(int[] nums) {
        if (nums.length <= 2)
            return nums.length;
        int slow = 2; // slow表示已经纳入最终结果的数组
        int fast = 2; // fast用于遍历每一个元素
        while (fast < nums.length) {
            // 如果现在fast指向的元素与结果中的前两个不重复则纳入结果
            if (nums[fast] != nums[slow - 2]) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
}